/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.rest;

import edu.ucue.ptc.gco.mdl.Cliente;
import edu.ucue.ptc.gco.mdl.Empleado;
import edu.ucue.ptc.gco.mdl.Pedido;
import edu.ucue.ptc.gco.mdl.Persona;
import edu.ucue.ptc.gco.mdl.Ruta;
import edu.ucue.ptc.gco.mdl.Visita;
import edu.ucue.ptc.gco.ngc.PedidoManagerLocal;
import edu.ucue.ptc.gco.ngc.VisitaManagerLocal;
import edu.ucue.ptc.gco.util.AtributoInvalidoException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;

/**
 * REST Web Service
 *
 * @author wilo
 */
//idEmpleado/lon/lat/obs/idRuta
@Path("CrearVisita/{detalleVisita}/{latitud}/{longitud}/{idRuta}/{idEmpleado}/{idCliente}/{idPedido}/{nombre}/{clave}/{callback}")
@RequestScoped
public class CrearVisitaResource {

    @Context
    private UriInfo context;

    @Inject
    private Visita visita;
    
    @Inject
    private Ruta ruta;
    
    @Inject
    private Empleado empleado;
    
    @Inject
    private Cliente cliente;
    
    @Inject 
    private VisitaManagerLocal VisitaManager;
    
    @Inject 
    private Pedido pedido;
    
    
    /**
     * Creates a new instance of CrearVisitaResource
     */
    public CrearVisitaResource() {
    }

    /**
     * Retrieves representation of an instance of edu.ucue.ptc.rest.CrearVisitaResource
     * @return an instance of java.lang.String
     */
    
    //{detalleVisita}/{latitud}/{longitud}/{idRuta}/{idEmpleado}/{idCliente}/
    //{idPedido}/{nombre}/{clave}/{callback}
    
    @GET
    @Produces("application/json")
    //{nombre}/{clave}/{detalleVisita}/{latitud}/{longitud}/{idRuta}/{idEmpleado}/{idPedido}/{callback}
    public String getJson(@PathParam("detalleVisita") String detalleVisita,@PathParam("latitud") String latitud,@PathParam("longitud") String longitud,
    @PathParam("idRuta") String idRuta,@PathParam("idEmpleado") String idEmpleado,@PathParam("idCliente") String idCliente,
    @PathParam("idPedido") String idPedido,
    @PathParam("nombre") String nombre,@PathParam("clave") String clave,@PathParam("callback") String callback) {
        //TODO return proper representation object
                                                                                              
//        visita.setDetalleVisita(detalleVisita);
        
        Calendar calendario = GregorianCalendar.getInstance();
        visita.setFechaVisita(calendario.getTime());
        
        empleado.setIdPersona(Integer.parseInt(idEmpleado));
        visita.setEmpleado(empleado);
        visita.setDetalleVisita(detalleVisita);
        visita.setLatitud(Double.parseDouble(latitud));
        visita.setLongitud(Double.parseDouble(longitud));
       
        if(idPedido.equals("0")) visita.setPedido(null);
        else {
        pedido.setIdPedido(Integer.parseInt(idPedido));
        visita.setPedido(pedido);
        }
        cliente.setIdPersona(Integer.parseInt(idCliente));
        ruta.setIdRuta(Integer.parseInt(idRuta));
        visita.setPersona(cliente);
        visita.setRuta(ruta);
        
        try {
            VisitaManager.crear(visita);
            return callback+"({\"callback\":\""+callback+"\",\"respuesta\":\""+"Visita registrada correctamente"+"\"})";
        } catch (AtributoInvalidoException ex) {
            Logger.getLogger(CrearVisitaResource.class.getName()).log(Level.SEVERE, null, ex);
            return callback+"({\"callback\":\""+callback+"\",\"errormsg\":\""+"Error no se ha guardado la visita"+"\"})";
        }
        
    }

    /**
     * PUT method for updating or creating an instance of CrearVisitaResource
     * @param content representation for the resource
     * @return an HTTP response with content of the updated or created resource.
     */
    @PUT
    @Consumes("application/json")
    public void putJson(String content) {
    }
}
